package com.pai4j.zwiki.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 用户VIP等级枚举
 * 不同等级享受不同的队列优先级和并发额度
 *
 * @author pai4j
 * @since 2025-10-14
 */
@Getter
@AllArgsConstructor
public enum UserVipLevel {

    /**
     * 普通用户
     * - 优先级: 3
     * - 最大并发任务: 2
     * - 队列位置: 普通队列
     */
    NORMAL(0, "普通用户", 3, 2, false),

    /**
     * VIP1
     * - 优先级: 5
     * - 最大并发任务: 3
     * - 队列位置: VIP队列
     */
    VIP1(1, "VIP会员", 5, 3, true),

    /**
     * VIP2
     * - 优先级: 7
     * - 最大并发任务: 5
     * - 队列位置: VIP队列
     */
    VIP2(2, "高级VIP", 7, 5, true),

    /**
     * VIP3（至尊VIP）
     * - 优先级: 10
     * - 最大并发任务: 10
     * - 队列位置: VIP专属队列
     */
    VIP3(3, "至尊VIP", 10, 10, true);

    /**
     * 等级代码
     */
    private final Integer level;

    /**
     * 等级名称
     */
    private final String name;

    /**
     * 队列优先级（1-10，越大越优先）
     */
    private final Integer priority;

    /**
     * 最大并发任务数
     */
    private final Integer maxConcurrentTasks;

    /**
     * 是否使用VIP通道
     */
    private final Boolean useVipChannel;

    /**
     * 根据等级代码获取VIP等级
     */
    public static UserVipLevel fromLevel(Integer level) {
        if (level == null) {
            return NORMAL;
        }
        for (UserVipLevel vipLevel : values()) {
            if (vipLevel.getLevel().equals(level)) {
                return vipLevel;
            }
        }
        return NORMAL;
    }

    /**
     * 判断是否为VIP用户
     */
    public boolean isVip() {
        return this.useVipChannel;
    }
}

